#!/usr/bin/python
# -*- coding: utf-8 -*-

import time
from sets import Set
import random

from django.conf import settings

import twitter
import bitly
from mobile.models import *

# Auto Follow ###################################################################################################

def auto_follow():
    """
    (c) 2009 Ben McIlwain, released under the terms of the GNU GPL v3.
    Este metodo comprueba la lista de followers con la de following, y agrega de forma automatica a los nuevos followers
    """
    api = twitter.Api(username=settings.TWITTER_USERNAME, password=settings.TWITTER_PASSWORD)
     
    following = api.GetFriends()
    friendNames = Set()
    for friend in following:
        friendNames.add(friend.screen_name)
     
    followers = api.GetFollowers()
    for follower in followers:
        if (not follower.screen_name in friendNames):
            api.CreateFriendship(follower.screen_name)

# Direct Messages ###########################################################################################

def areWeFriends(screen_name, api):
    isFriend = 0
    friends = api.GetFriends()
    for friend in friends:
        if friend.screen_name == screen_name:
            isFriend = 1
    return isFriend

def makeFriend(screen_name, api):
    if areWeFriends(screen_name, api) == 0:
        api.CreateFriendship(user=screen_name)

def sendDirectMessage(screen_name, resp, api):
    makeFriend(screen_name, api)
    response = resp
    api.PostDirectMessage(screen_name,response)

def parse_message(dm, api):
    resp = ''
    comando = dm.text.lower().split(' ',1)
    if comando[0] == 'a' or comando[0] == 'acceso':
        #acceso
        try:
            acceso = Entry.objects.get(label__iexact=comando[1]).get_last_capture()
            fecha = u'%s-%s-%s %s:%s' % (acceso.created.day, acceso.created.month, acceso.created.year, acceso.created.hour, acceso.created.minute)
            resp = u'%s %s %s' % (acceso.entry.label, acceso.get_status_display(), fecha)
        except:
            pass
            
    elif comando[0] == 'c' or comando[0] == 'camara':
        #camaras
        try:
            camaras = Camera.objects.filter(name__iexact=comando[1])
            resp = comando[1].capitalize()
            miniurl = bitly.Api(login=settings.BITLY_USERNAME, apikey=settings.BITLY_API_KEY)
            for camara in camaras:
                resp += ' '+miniurl.shorten(camara.url)
        except:
            pass
    
    elif comando[0] == 'i' or comando[0] == 'incidencias':
        #incidencias
        try:
            capture = CAPVIncidentCapture.get_last_capture()
            incs = CAPVIncident.objects.filter(carretera__name__iexact=comando[1], capture=capture)
            resp = comando[1].upper()+' '
            for inc in incs:
                resp += 'km %s: %s %s' % (inc.km, inc.tipo.name, inc.causa.name)
                if inc.sentido != '':
                    resp += ' sent: %s' % inc.sentido
                if inc.retencion != '':
                    resp += ' ret: %s' % inc.retencion
                resp += ' | '
        except:
            pass
            
    elif comando[0] == 'p' or comando[0] == 'puerto':
        #puertos
        try:
            capture = CAPVPuertoCapture.get_last_capture()
            puertos = CAPVPuertoIncident.objects.filter(puerto__name__iexact=comando[1], capture=capture)
            resp = comando[1].upper()+' '
            for puerto in puertos:
                if puerto.vialidad:
                    vialidad = 'ok'
                else:
                    vialidad = 'no'
                resp += '%s turismo: %s art: %s camiones: %s vialidad: %s' % (puerto.puerto.carretera.name, puerto.get_estado_turismos_display(), puerto.get_estado_articulados_display(), puerto.get_estado_camiones_display(), vialidad)
        except:
            pass
    
    sendDirectMessage(dm.sender_screen_name, resp, api)

#Read logs
def read_messages():
    """
    Metodo encargado de conectarse a twitter y comprobar la bandeja de entrada de DMs con nuestro log
    """
    #config
    dmfile = '/home/infocarretera/log/twitterdm.log'
    last_id = 0
    api = twitter.Api(username=settings.TWITTER_USERNAME, password=settings.TWITTER_PASSWORD)
    
    #log
    log = open(dmfile, 'rw')
    last_dm_id = log.read()
    log.close()
    
    if last_dm_id > 0:
        #Leer DMs desde el ultimo registrado en el log
        directMessages = api.GetDirectMessages(since_id=last_dm_id)

        #Actualizar logs
        if directMessages != []:
            last_dm_id = directMessages[0].id

        #si tenemos mensajes nuevos
        if last_dm_id > 0:
            log = open(dmfile,'w')
            log.write( str(last_dm_id) )
            log.close()

        for directMessage in directMessages:
            parse_message(directMessage, api)

    #else:
    #    print 'No se pudo leer '+dmfile